/**
 * 数字格式化工具函数
 */

/**
 * 格式化字节大小
 * @param {number} bytes 字节数
 * @returns {string} 格式化后的大小
 */
export const formatBytes = (bytes) => {
  if (!bytes || bytes === 0) return '0 B'
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  return parseFloat(((bytes / Math.pow(k, i)) || 0).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 格式化数字（添加千位分隔符）
 * @param {number} num 数字
 * @returns {string} 格式化后的数字
 */
export const formatNumber = (num) => {
  return num.toLocaleString()
}

/**
 * 格式化百分比
 * @param {number} value 数值
 * @param {number} total 总数
 * @param {number} decimals 小数位数
 * @returns {string} 百分比字符串
 */
export const formatPercentage = (value, total, decimals = 1) => {
  if (!total || total === 0) return '0%'
  if (value == null) return '0%'
  const percentage = (value / total) * 100
  return (percentage || 0).toFixed(decimals) + '%'
}

/**
 * 格式化时间
 * @param {number} seconds 秒数
 * @returns {string} 格式化后的时间字符串
 */
export const formatDuration = (seconds) => {
  if (!seconds || seconds === 0) return '0s'

  const hours = Math.floor(seconds / 3600)
  const minutes = Math.floor((seconds % 3600) / 60)
  const remainingSeconds = seconds % 60

  if (hours > 0) {
    return `${hours}h ${minutes}m ${remainingSeconds}s`
  } else if (minutes > 0) {
    return `${minutes}m ${remainingSeconds}s`
  } else {
    return `${remainingSeconds}s`
  }
}

/**
 * 截断文本
 * @param {string} text 原文本
 * @param {number} maxLength 最大长度
 * @returns {string} 截断后的文本
 */
export const truncateText = (text, maxLength = 50) => {
  if (!text) return ''
  if (text.length <= maxLength) return text
  return text.substring(0, maxLength) + '...'
}

/**
 * 转换文件大小为颜色
 * @param {number} bytes 字节数
 * @returns {string} 颜色值
 */
export const getSizeColor = (bytes) => {
  if (!bytes || bytes === 0) return '#909399'

  const mb = bytes / (1024 * 1024)
  if (mb < 1) return '#67C23A'    // 绿色 - 小文件
  if (mb < 10) return '#E6A23C'    // 黄色 - 中等文件
  if (mb < 50) return '#F56C6C'    // 红色 - 大文件
  return '#FF4D4F'                  // 深红色 - 超大文件
}